#include <wx/radiobut.h>
#include "wxsradiobutton.h"

namespace {
  wxsRegisterItem<wxsRadioButton> Reg( _T( "RadioButton" ), _T( "单选框" ), wxsTWidget, _T( "标准" ), 170 );
  WXS_ST_BEGIN( wxsRadioButtonStyles, _T( "" ) )
  WXS_ST_CATEGORY( "wxRadioButton" )
  WXS_ST( wxRB_GROUP )
  WXS_ST( wxRB_SINGLE )
  WXS_ST_DEFAULTS()
  WXS_ST_END()
  WXS_EV_BEGIN( wxsRadioButtonEvents )
  WXS_EVI( EVT_RADIOBUTTON, wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEvent, Select )
  WXS_EV_END()
}

wxsRadioButton::wxsRadioButton( wxsItemResData* Data ):
  wxsWidget(
    Data,
    &Reg.Info,
    wxsRadioButtonEvents,
    wxsRadioButtonStyles ),
  Label( _T( "Label" ) ),
  IsSelected( false ) {}


void wxsRadioButton::OnBuildCreatingCode() {
  switch( GetLanguage() ) {
  case wxsCPP: {
    AddHeader( _T( "<wx/radiobut.h>" ), GetInfo().ClassName, hfInPCH );
    Codef( _T( "%C(%W, %I, %t, %P, %S, %T, %V, %N);\n" ), Label.wx_str() );
    if( IsSelected ) {
      Codef( _T( "%ASetValue(%b);\n" ), true );
    }
    BuildSetupWindowCode();
    return;
  }
  case wxsUnknownLanguage:
  default: {
    wxsCodeMarks::Unknown( _T( "wxsRadioButton::OnBuildCreatingCode" ), GetLanguage() );
  }
  }
}

wxObject* wxsRadioButton::OnBuildPreview( wxWindow* Parent, long Flags ) {
  wxRadioButton* Preview = new wxRadioButton( Parent, GetId(), Label, Pos( Parent ), Size( Parent ), Style() );
  Preview->SetValue( IsSelected );
  return SetupWindow( Preview, Flags );
}

void wxsRadioButton::OnEnumWidgetProperties( M_Code_unused long Flags ) {
  WXS_SHORT_STRING( wxsRadioButton, Label, _T( "Label" ), _T( "label" ), _T( "" ), true )
  WXS_BOOL( wxsRadioButton, IsSelected, _T( "Is Selected" ), _T( "selected" ), false )
}
